iT邦幫忙

2023 iThome 鐵人賽

DAY 29
0
Software Development

當rust 遇上 cqrs & es系列 第 29

D29 metadata in es

  • 分享至 

  • xImage
  •  

event store裡的metadata 先前沒有用到,這個推測是application layer使用,不是Domain Event本身內容,如api接到的user登入訊息,時間點或IP等,以下試試看內容:

準備meta,模擬APP狀態:

let mut meta = HashMap::<String, String>::new();
meta.insert("user".to_string(), "admin".to_string());
meta.insert("ip".to_string(), "1.1.1.1".to_string());
meta.insert("timestamp".to_string(), "2023-10-10 12:00:00".to_string());

先前執行指令時使用的是execute,改執行execute_with_metadata就可以傳入meta資訊:

let _ = reader_cqrs.execute_with_metadata("test-reader-1", ReaderCommand::CreateReader {
    name: "John Smith".to_string(),
},meta).await;

查看序列化後的結果:

======== [Source of Truth] Events ========
[
    SerializedEvent {
        aggregate_id: "test-reader-1",
        sequence: 1,
        aggregate_type: "Reader",
        event_type: "ReaderEvent",
        event_version: "0.1.0",
        payload: Object {
            "ReaderCreated": Object {
                "id": String("6795170c-f0ad-4736-94a7-1c641f1ae924"),
                "name": String("John Smith"),
            },
        },
        metadata: Object {
            "ip": String("1.1.1.1"),
            "timestamp": String("2023-10-10 12:00:00"),
            "user": String("admin"),
        },
    }
]

可以看到meta順帶一起紀錄著,方便查找問題時使用。


上一篇
D28 test upcater
下一篇
D30 Ending
系列文
當rust 遇上 cqrs & es30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言